package part1.language_basis.day02;

public class DataTypeDemo {

    //short  正负3万多
    //float double精度不同，float 4个字节，精确小数点后7位，double 8字节精确小数点后15位
    //KB(千字节) B(字节) 1B=8bit(位) 1个字节等于8位 int占32位
    public static void main(String[] args) {

        char c11 = '2'+'2';
        char c12= '2';
        char c13= '3';
        char c14 = (char) (c12 + c13);
        System.out.println(c14);

        //类型间的转换
        //1) 整数直接量可以直接赋值给byte，short，char，但不能超出范围
        //2) byte,short,char型数据参入运算时 系统一律将其转换为int类型运算
        byte b1 = 5;
        byte b2 = 6;
        byte b3 = (byte) (b1 +b2);

        System.out.println(2+2);  //4
        System.out.println(2+'2');//52 2加上'2'的码50
        System.out.println('2'+'2'); //100 '2'的码50 加上'2'的码50
        System.out.println('2'); //2

        int a4 = '我'; //看字符对应的码
        System.out.println(a4); //'我'的码
        char b5 = 65; //看码对应的字符
        System.out.println(b5); //A


        int a = 5;
        long b = a; //自动/隐式类型转换
        int c = (int) b; //强制类型转换

        long d =5; //自动类型转换
        double e = 5; //自动类型转换
        System.out.println(e); //5.0

        long f = 100000000000L;
        int g = (int) f;
        System.out.println(g); //1410065408 强转有可能发生溢出
        double h = 25.978;
        int i = (int) h;
        System.out.println(i); //25  强转有可能丢失精度



        /*
        //5)char: 字符型 2个字节
        char c1 = '女'; //字符女
        char c2 = 'f'; //字符f
        char c3 = '6'; //字符6
        char c4 = ' '; //空格符
        //char c5 = 女; //编译错误 字符直接量必须放在单引号中
        //char c6 = ''; //编译错误 必须有字符
        //char c7 = '10'; //编译错误 只能装一个字符

        char c8 = 65; //0-65535之间;
        System.out.println(c8); //'A',println()时会依据c8的类型来做输出
        //若c8为char类型 则以字符形式展示
        //若c8为int类型 则以数字形式展示
        char c9 = '\\';
        System.out.println(c9); //\
        char c10 = '1' + '2';
        System.out.println(c10);//c
         */




        /*
        //4)boolean: 布尔型 1个字节
        boolean a = true; // true为布尔型直接量
        boolean b = false; //false为布尔型直接量
        //boolean c = 25.6; //编译错误 布尔型只能存储true或false
         */




        /*
        //3)double:浮点数，8个字节，很大很大很大
        double a = 25.678; //35.678为小数直接量 默认为double类型
        float b = 25.678F; //25.678F为float型直接量

        double c=3.0,d=2.9;
        System.out.println(c-d); //0.100000000000009 发生舍入误差了
         */




        /*
        //2)long:长整型 8个字节 -900万万亿多到900万万亿多
        long a = 25L; //25L为长整型直接量
        //long b = 100000000000; //编译错误 100亿默认为int类型 但超出int范围了
        long c = 100000000000L; //100亿L为长整型直接量
        long d = 365L * 24 * 60 * 60 * 1000; //去年一年多经历的毫秒
        System.out.println(d); //31536000000

        long e = 1000000000*2*10L;
        System.out.println(e); //200亿
        long f = 1000000000*3*10L;
        System.out.println(f); //不是300亿
        long g = 10000000000L*3*10;
        System.out.println(g); //300亿
         */




        /*
        //1)int:整型，4个字节 -21个多亿到21个多亿
        int a = 250;//250为整数直接量 默认为int类型
        //int b = 100000000000; //编译错误 100亿默认为int类型 但超出范围
        //int c = 25.453463; //编译错误 整型变量中只能装整数

        System.out.println(5/2);//2
        System.out.println(2/5);//0
        System.out.println(5/2.0);//2.5

        int d = 2147483647;//int的最大值
        d = d +1;
        System.out.println(d);//-2147483648,发生溢出了
         */
    }
}
